package abaolog

import (
	"fmt"
	"os"
	"path"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"github.com/sirupsen/logrus"
)

// File config logrus log to file
func File(logFilePath, logFileName, logType string, logFileDays int, lineNumber bool) {
	//创建目录
	err := os.MkdirAll(fmt.Sprintf("%s", logFilePath), os.ModePerm)
	if err != nil {
		logrus.Error(err)
		return
	}
	// 日志文件
	fileName := path.Join(logFilePath, logFileName)

	/* 日志轮转相关函数
	`WithLinkName` 为最新的日志建立软连接
	`WithRotationTime` 设置日志分割的时间，隔多久分割一次
	WithMaxAge 和 WithRotationCount二者只能设置一个
	`WithMaxAge` 设置文件清理前的最长保存时间
	`WithRotationCount` 设置文件清理前最多保存的个数
	*/
	// 下面配置日志每隔 1 天轮转一个新文件，保留最近 7 天的日志文件，多余的自动清理掉。

	writer, _ := rotatelogs.New(
		// 分割后的文件名称
		fileName+".%Y-%m-%d.log",
		// 生成软链，指向最新日志文件
		rotatelogs.WithLinkName(logFileName),
		// 设置最大保存时间(7天)
		rotatelogs.WithMaxAge(time.Duration(logFileDays)*24*time.Hour),
		// 设置日志切割时间间隔(1天)
		rotatelogs.WithRotationTime(24*time.Hour),
	)

	logrus.SetOutput(writer)
	// 显示文件名和行号信息
	logrus.SetReportCaller(lineNumber)

	switch logType {
	case "text":
		logrus.SetFormatter(new(LogFormatter))
	case "json":
		// // 设置日志格式为json格式
		logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05"})
	default:
		logrus.SetFormatter(new(LogFormatter))
	}

	logrus.Info("init log done")

}
